package com.itheima.jwt;

import com.alibaba.fastjson.JSON;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * jwt令牌生成和解析测试
 */
public class JwtTest {

    public static void main(String[] args) {
/**
 * jwt令牌的生成
 */
        //获取系统的当前时间
        long currentTimeMillis = System.currentTimeMillis();
        Date date = new Date(currentTimeMillis+30*60*1000);//比当前时间多30分钟
        Map<String,String> map = new HashMap<String,String>();
        map.put("1","1");
        map.put("2","2");
        map.put("3","3");
        String s = JSON.toJSONString(map);
        System.out.println(s);
        //生成jwt令牌
        JwtBuilder jwtBuilder = Jwts.builder()
                .setId("66")//设置jwt编码
                .setSubject(s)//设置jwt主题,可以说json数据
                .setIssuedAt(new Date(currentTimeMillis))//设置jwt签发日期
                .setExpiration(date)//设置jwt的过期时间
               .claim("roles","admin")//向jwt中填充数据
               .claim("company","itheima")//向jwt中填充数据
                .signWith(SignatureAlgorithm.HS256, "itheima");

        //生成jwt
        String jwtToken = jwtBuilder.compact();
        System.out.println(jwtToken);
/**
 * jwt令牌的解析
 */
        //解析jwt,得到其内部的数据
        Claims claims = Jwts.parser().setSigningKey("itheima").parseClaimsJws(jwtToken).getBody();
        System.out.println(claims);
        System.out.println("令牌签发时间"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(claims.getIssuedAt()));
        System.out.println("令牌过期时间"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(claims.getExpiration()));
        System.out.println("company参数值"+claims.get("company"));
        System.out.println("登录用户id:"+claims.getId());
        System.out.println(System.currentTimeMillis());
        System.out.println("我的修改");
        System.out.println("同事的修改");

    }
}
